page.tsx 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268
  1. "use client";
  2. import { getShareLinkApi } from "@/api/config";
  3. import { useRouter } from "@/i18n/routing";
  4. import { useUserInfoStore } from "@/stores/useUserInfoStore";
  5. import { copyText } from "@/utils/methods";
  6. import { Toast } from "antd-mobile";
  7. import clsx from "clsx";
  8. import { useTranslations } from "next-intl";
  9. import { usePathname } from "next/navigation";
  10. import React from "react";
  11. import styles from "./page.module.scss";
  12. const Item = ({ type = "shake" }) => {
  13. return (
  14. <div
  15. className={clsx(
  16. "min-w-fit mb-[.2rem] flex flex-shrink-0 flex-grow flex-row items-center",
  17. styles.itemWrap
  18. )}
  19. >
  20. <div
  21. className={clsx(
  22. styles.item,
  23. // styles.disabled,
  24. styles.active,
  25. "flex flex-col items-center text-[.12rem]"
  26. )}
  27. >
  28. <div className={clsx(styles.itemImg, "mb-[.05rem]")}></div>
  29. <div>Promoção</div>
  30. <div>
  31. <span className="text-[#ffc000]">1</span> Pessoa
  32. </div>
  33. <div className={styles.itemMoney}>
  34. <span>+3000</span>
  35. </div>
  36. </div>
  37. <div
  38. className={clsx(styles.arrow, "relative top-[-.2rem] flex flex-row justify-center")}
  39. >
  40. <img src="/fission/arrow.png" className={clsx("w-[.2rem]")} alt="" />
  41. </div>
  42. </div>
  43. );
  44. };
  45. const Page: React.FC = () => {
  46. const t = useTranslations();
  47. const router = useRouter();
  48. const { userInfo } = useUserInfoStore();
  49. const pathname = usePathname();
  50. const [BASE_URL, setBaseUrl] = React.useState("");
  51. const url = React.useMemo(() => {
  52. const shareUrl = `${BASE_URL}?share_id=${userInfo ? userInfo.referrer_code : "xxxxxx"}`;
  53. return encodeURIComponent(`${shareUrl}`);
  54. }, [BASE_URL, userInfo]);
  55. const SHARE_SOURCE = React.useMemo(() => {
  56. return [
  57. {
  58. icon: "/summary/Facebook.png",
  59. label: "Facebook",
  60. shareUrl: `https://www.facebook.com/sharer/sharer.php?u=${url}`,
  61. },
  62. {
  63. icon: "/summary/WhatsApp.png",
  64. label: "WhatsApp",
  65. shareUrl: `https://api.whatsapp.com/send?text=${url}`,
  66. },
  67. {
  68. icon: "/summary/Telegram.png",
  69. label: "Telegram",
  70. shareUrl: `https://t.me/share/url?url=${url}`,
  71. },
  72. {
  73. icon: "/summary/Twitter.png",
  74. label: "Twitter",
  75. shareUrl: `https://twitter.com/intent/tweet?text=${url}`,
  76. },
  77. {
  78. icon: "/summary/Email.png",
  79. label: "Email",
  80. shareUrl: `mailto: ?&subject=&cc=&bcc=&body=${url}`,
  81. },
  82. ];
  83. }, [url]);
  84. React.useEffect(() => {
  85. init();
  86. }, []);
  87. const init = async () => {
  88. const res = await getShareLinkApi();
  89. if (res.code === 200) {
  90. const url =
  91. res.data.find((item) => item.type === 2)?.url ??
  92. window.location.href.replace(pathname, "");
  93. setBaseUrl(url);
  94. }
  95. };
  96. return (
  97. <div className={styles.fissionPage}>
  98. <div className={styles.container}>
  99. <img className={styles.img} src="/fission/title.png" alt="" />
  100. <div className={styles.content}>
  101. <div
  102. className={clsx(
  103. "mb-[.09rem] flex flex-row items-center justify-between p-[.1rem]",
  104. styles.box
  105. )}
  106. >
  107. <div
  108. className={clsx(
  109. "mr-[.1rem] overflow-hidden text-ellipsis whitespace-nowrap"
  110. )}
  111. >
  112. Meu link:{decodeURIComponent(url)}
  113. </div>
  114. <span
  115. className={styles.copy}
  116. onClick={() => {
  117. copyText(decodeURIComponent(url));
  118. Toast.show({
  119. icon: "success",
  120. content: t("SummaryPage.copySuc"),
  121. maskClickable: false,
  122. });
  123. }}
  124. ></span>
  125. </div>
  126. <div className={clsx(styles.box, "mb-[.1rem] p-[.1rem]")}>
  127. <div className={clsx("mb-[.1rem] text-[.14rem] font-bold")}>
  128. Compartilhamento Rápido
  129. </div>
  130. <div className={clsx("flex flex-row items-center")}>
  131. {SHARE_SOURCE.map((item) => {
  132. return (
  133. <a
  134. href={item.shareUrl}
  135. target={"_blank"}
  136. className={clsx(
  137. "mr-[.1rem] w-[.4rem] overflow-hidden rounded-[50%]"
  138. )}
  139. key={item.label}
  140. >
  141. <img className={styles.icon} src={item.icon} alt="" />
  142. </a>
  143. );
  144. })}
  145. </div>
  146. </div>
  147. <div
  148. className={clsx(
  149. styles.box,
  150. "mb-[.2rem] flex flex-row items-center justify-between p-[.1rem]"
  151. )}
  152. >
  153. <div>
  154. <div>Meus subordinados diretos</div>
  155. <div>
  156. <span className="text-[#ffae00]">0Pessoa </span>
  157. (Válido <span className="text-[#ffae00]">0Pessoa</span>)
  158. </div>
  159. </div>
  160. <div
  161. className={clsx("text-[#2dd0df]")}
  162. onClick={() => router.push("/fission/detail")}
  163. >
  164. Detalhes&gt;
  165. </div>
  166. </div>
  167. <div className={clsx("mb-[.1rem] flex flex-row flex-wrap justify-start")}>
  168. <Item></Item>
  169. <Item></Item>
  170. <Item type={"shake"}></Item>
  171. <Item></Item>
  172. <Item></Item>
  173. <Item></Item>
  174. <Item></Item>
  175. <Item></Item>
  176. <Item></Item>
  177. </div>
  178. <div className={clsx(styles.box, "p-[.1rem]")}>
  179. <div>
  180. 0 que é o número de promoção efetiva?(Preenchendo as seguintes
  181. condições)
  182. </div>
  183. <div className={styles.hr}></div>
  184. <div className="flex flex-row items-center justify-between">
  185. <div>Primeiro depósito do subordinado</div>
  186. <div className="text-[#2dd0df]">≥0,00</div>
  187. </div>
  188. <div className={styles.hr}></div>
  189. <div className="flex flex-row items-center justify-between">
  190. <div>Depositos acumulados do subordinado</div>
  191. <div className="text-[#2dd0df]">≥0,00</div>
  192. </div>
  193. <div className={styles.hr}></div>
  194. <div className="flex flex-row items-center justify-between">
  195. <div>quantidade de apostas acumuladas pelo subordinado</div>
  196. <div className="text-[#2dd0df]">≥0,00</div>
  197. </div>
  198. <div className={styles.hr}></div>
  199. <div className="flex flex-row items-center justify-between">
  200. <div>Dias acumulados de depósito do subordinado</div>
  201. <div className="text-[#2dd0df]">≥0,00</div>
  202. </div>
  203. <div className={styles.hr}></div>
  204. <div className="flex flex-row items-center justify-between">
  205. <div>Número acumulado de recargas dos subordinados</div>
  206. <div className="text-[#2dd0df]">≥0,00</div>
  207. </div>
  208. </div>
  209. <div
  210. className={clsx(
  211. styles.box,
  212. "relative mt-[.4rem] p-[.15rem] pl-[.3rem] pt-[.4rem]"
  213. )}
  214. >
  215. <div className={styles.ttitle}>Detalhes do Evento</div>
  216. <ul className="list-decimal">
  217. <li>
  218. Convide amigos para receber um bônus. Ao completar diferentes
  219. números de convites, você pode ganhar o bônus correspondente, com um
  220. valor máximo de 88.888. Quanto mais amigos você convidar, maiores
  221. serão as recompensas; As apostas feitas pelos subordinados são
  222. consideradas válidas apenas nas seguintes plataformas;Todas as
  223. Plataformas;
  224. </li>
  225. <li>
  226. Esta atividade é um presente adicional da plataforma.Você também
  227. pode desfrutar de outras recompensas e comissões de agentes, o que
  228. significa que você pode aproveitar a a chance de ganhar bônus varias
  229. vezes;
  230. </li>
  231. <li>
  232. As recompensas só podem ser reivindicadas manualmente no iOS,
  233. Android e H5, e serão distribuídas automaticamente se expiradas;
  234. </li>
  235. <li>
  236. O bônus (excluindo o principal) concedido por esta atividade requer
  237. 1 vez o valor em apostas valida para serem retiradas;
  238. </li>
  239. <li>
  240. Esta atividade está limitada ao titular da conta para operações
  241. humanas normais. Alugar, usar cheats, robôs, jogar com contas
  242. diferentes,jogar com varias pessoas, arbitragem, interfaces,
  243. acordos, explorar vulnerabilidades, controle de grupo ou outros
  244. meios técnicos são proibidos.Caso contrário, as recompensas podem
  245. ser canceladas ou deduzidas, congeladas ou até mesmo colocadas em
  246. uma lista;
  247. </li>
  248. <li>
  249. Para evitar mal-entendidos de interpretação de texto, a plataforma
  250. reserva o direito de interpretação e descisão final para à
  251. plataforma.
  252. </li>
  253. </ul>
  254. </div>
  255. </div>
  256. </div>
  257. </div>
  258. );
  259. };
  260. export default Page;